package org.example.com.editor.command.workspaceCommand;


import org.example.com.editor.command.Command;
import org.example.com.editor.ui.ConsoleUI;
import org.example.com.editor.util.DirTreeUtil;
import org.example.com.editor.workspace.Workspace;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * 目录树命令：以树形结构显示指定目录（或当前工作目录）的文件和文件夹
 */
public class DirTreeCommand implements Command {

    @Override
    public void execute(Workspace workspace, ConsoleUI ui) {
        // 1. 解析命令参数
        String[] args = ui.getCommandArgs();
        if (args.length > 2) {
            ui.printError("用法：dir-tree [目录路径]");
            return;
        }

        // 2. 确定目标路径，验证目录合法性
        String targetPath = (args.length == 2) ? args[1] : null;
        String validateMsg = DirTreeUtil.validateDir(targetPath);
        if (validateMsg != null) {
            ui.printError(validateMsg);
            return;
        }

        // 3. 获取目标目录（验证通过，可安全创建File对象）
        File targetDir = (targetPath == null)
                ? new File(System.getProperty("user.dir"))
                : new File(targetPath);

        // 4. 调用工具类生成树形结构，输出结果
        try {
            List<String> treeLines = DirTreeUtil.generateDirTree(targetDir);
            ui.printInfo("目录树：" + targetDir.getAbsolutePath());
            for (String line : treeLines) {
                ui.printInfo(line);
            }
        } catch (IOException e) {
            ui.printError("生成目录树失败：" + e.getMessage());
        }
    }

    @Override
    public String getName() {
        return "dir-tree";
    }
}